/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Compras.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Compras.DAO.ProveedorDAO;
import com.dp1.pucp.Compras.VIsta.ProdxProvGUI;
import com.dp1.pucp.Compras.VIsta.MantProveedorGUI2;
import com.dp1.pucp.Compras.VIsta.ProveedorGUI;
import com.dp1.pucp.Logistica.Controlador.MantTipoProductoControlador;
import com.dp1.pucp.Modelo.Clases.Proveedor;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author ubuntu64
 */
public class MantProveedorControlador {
    
    private ProveedorDAO m;
    private MantProveedorGUI2 mantProveedorView;
    private ArrayList<Proveedor> lstProveedor;
    private ArrayList<String> lstEstado;
    
    public MantProveedorControlador(ProveedorDAO dao, MantProveedorGUI2 v){
        m = dao;
        mantProveedorView = v;
       
        llenarEstadoCombo();
          mantProveedorView.addBuscarListener(new listarProveedores(this));
          mantProveedorView.addEditarListener(new editarProveedorListener(this));
          mantProveedorView.addNuevoListener(new crearProveedorListener(this));
          mantProveedorView.addLimpiarListener(new limpiarListener());
          mantProveedorView.addEliminarListener(new eliminarListener());
//        mantProveedorView.addActivarListener(new activarListener());
          mantProveedorView.addAsignarProductoListener(new asignarProductoListener(this));
        
    }
    
    private void llenarEstadoCombo(){
        lstEstado = m.listarEstado();
        mantProveedorView.llenaComboEstado(lstEstado);
    } 
    
     class listarProveedores implements ActionListener
    {
        private ProveedorControlador buc;
        public listarProveedores(MantProveedorControlador mantProv){
            //buc=buscarusr;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            ArrayList<Proveedor> listaProv;
            listaProv = m.listarProveedorSolo();
            lstProveedor = realizarFiltro(listaProv);
            mantProveedorView.llenaGrilla(lstProveedor);
        }
    }
     
//     public void listarResultados(int e){
//        lstProveedor = m.listarProveedor(e); 
//        mantProveedorView.realizarFiltro(lstProveedor);
//       
//    }
     
     class editarProveedorListener implements ActionListener {
        
        private ProveedorControlador buc;
        public editarProveedorListener(MantProveedorControlador buscarusr){
            //buc=buscarusr;
        }
        @Override
        public void actionPerformed(ActionEvent e) {            
            int sel=mantProveedorView.getFilaSel();
            if (sel!=-1){
                ProveedorGUI p = new ProveedorGUI(mantProveedorView.getPadre(), true);
                Proveedor u = lstProveedor.get(sel);                
                ProveedorControlador c = new ProveedorControlador (m,p,buc,u);
                LogDAO.insertarLog(MainController.usuario, "Ingresar Editar Proveedor");
                p.setVisible(true);                
            }
            else{
                mantProveedorView.mostrarAviso("Debe seleccionar un proveedor");
            }
        }
    
    } 
     
    class crearProveedorListener implements ActionListener {
        
        private ProveedorControlador buc;
        public crearProveedorListener(MantProveedorControlador proveedor){
            //buc=empleado;
        }
                
        @Override
        public void actionPerformed(ActionEvent e) {
            ProveedorGUI p = new ProveedorGUI(mantProveedorView.getPadre(), true);
            ProveedorControlador c = new ProveedorControlador (m,p,buc,null);
            LogDAO.insertarLog(MainController.usuario, "Ingresar Agregar Proveedor");
            p.setVisible(true);
        }
    
    }   
 
    
    class asignarProductoListener implements ActionListener {
        
        private MantTipoProductoControlador buc;
        public asignarProductoListener(MantProveedorControlador proveedor){
            //buc=empleado;
        }
                
        @Override
        public void actionPerformed(ActionEvent e) {
            int sel=mantProveedorView.getFilaSel();
            if (sel!=-1){
               ProdxProvGUI p = new ProdxProvGUI(mantProveedorView.getPadre(), true);
                Proveedor u = lstProveedor.get(sel);                
                ProdxProvControlador c = new ProdxProvControlador (m,p,buc,u,null,0,1);
                p.setVisible(true);     
             }
            else{
                mantProveedorView.mostrarAviso("Debe seleccionar un proveedor");
            }
    
    }  
    } 
    
    class limpiarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            mantProveedorView.LimpiarDatos();
        }        
    }  
    
    class eliminarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int sel=mantProveedorView.getFilaSel();
            if (sel!=-1){
                if (mantProveedorView.solicitarConfirmacion("¿Desea eliminar este proveedor?")==0){
                    Proveedor u = lstProveedor.get(sel); 
                    u.setEstado(0);
                    m.guardarProveedor(u);
                    mantProveedorView.mostrarAviso("Se eliminó exitosamente el proveedor");
                    LogDAO.insertarLog(MainController.usuario, "Eliminar Proveedor");
//                    listarResultados(mantOrdenCompraView.getEstado());
                    LogDAO.insertarLog(MainController.usuario, "Eliminar Proveedor");
                }
            }
            else{
                mantProveedorView.mostrarError("Debe seleccionar un Proveedor");
            }
        }        
    }
    
    public ArrayList<Proveedor> realizarFiltro(ArrayList<Proveedor> lista) {
        ArrayList<Proveedor> listOrden = new ArrayList<>();
        ArrayList<Proveedor> tempListOrden = new ArrayList<>();
        
        tempListOrden = lista;
        if (mantProveedorView.getEstado() != -1) {
            for (int i = 0; i < tempListOrden.size(); i++) {
                if (tempListOrden.get(i).getEstado() == mantProveedorView.getEstado()) {
                    listOrden.add(tempListOrden.get(i));
                }
            }
        } else {
            listOrden = tempListOrden;
        }
        
        tempListOrden = listOrden;
        listOrden = new ArrayList<>();

        if (!mantProveedorView.getRazonSocial().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListOrden.size(); i++) {
                if (tempListOrden.get(i).getRazonsocial().toUpperCase().contains(mantProveedorView.getRazonSocial().toUpperCase())) {
                    listOrden.add(tempListOrden.get(i));
                }
            }
        } else {
            listOrden = tempListOrden;
        }

        tempListOrden = listOrden;
        listOrden = new ArrayList<>();


        if (!mantProveedorView.getRuc().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListOrden.size(); i++) {
                if (tempListOrden.get(i).getRuc().toUpperCase().contains(mantProveedorView.getRuc().toUpperCase())) {
                    listOrden.add(tempListOrden.get(i));
                }
            }
        } else {
            listOrden = tempListOrden;
        }
        
         return listOrden;
        
//        
//        
//        
//        if (lista.size() == 0) { //Esto es si es q en la base de datos no hay ninguna orden guardada
//            mostrarAviso("No se ha registrado ningún Proveedor");
//        } else {
//            //veo si es que puso algun codigo, si es que si solo mostrará una orden unica
//            if (!(ruc.equals(""))) {
//                for (int i = 0; i < lista.size(); i++) {
//                    if (ruc.equals(lista.get(i).getRuc())) {
//                        listOrden.add(lista.get(i));
//                    }
//                }
//            } else {
//                //Para comprobar con a razon social 
//
//                if (mantProveedorView.getEstado() == 0) {
//                    if (!(razonSocial.equals(""))) {
//                        for (int i = 0; i < lista.size(); i++) {
//                            if (razonSocial.toLowerCase().contains(lista.get(i).getRazonsocial().toLowerCase())) {
//                                listOrden.add(lista.get(i));
//                            }
//                        }
//                        this.llenaGrilla(listOrden);
//                        return;
//                    } else {
//                        this.llenaGrilla(lista);
//                        return;
//                    }
//                }
//
//                if (!(ruc.equals(""))) {
//                    for (int i = 0; i < lista.size(); i++) {
//                        if ((this.getEstado() - 1 == lista.get(i).getEstado()) & (razonSocial.toLowerCase().contains(lista.get(i).getRazonsocial().toLowerCase()))) {
//                            listOrden.add(lista.get(i));
//                        }
//                    }
//                } else {
//                    for (int i = 0; i < lista.size(); i++) {
//                        if (this.getEstado() - 1 == lista.get(i).getEstado()) {
//                            listOrden.add(lista.get(i));
//                        }
//                    }
//                }
//
//            }
//
//
//            this.llenaGrilla(listOrden);
//
//        }
//        return;
    }
    
}


